OISST: SST Data

Contents

OISST: SST Data#

https://www.ncei.noaa.gov/products/optimum-interpolation-sst

import sys
import os
import os.path as op

import xarray as xr
import plotly.express as px
import geopandas as gpd
import pandas as pd
import cartopy.crs as ccrs
import numpy as np
import matplotlib.pyplot as plt

sys.path.append("../../../../indicators_setup")
from ind_setup.plotting import plot_base_map, plot_bar_probs
from ind_setup.plotting_int import plot_timeseries_interactive
lon_site, lat_site = 134.368203, 7.322074

#Area of interest
lon_range  = [129.4088, 137.0541]
lat_range = [1.5214, 11.6587]
shp_f = op.join(os.getcwd(), '..', '..','..', 'data/Palau_EEZ/pw_eez_pol_april2022.shp')
shp_eez = gpd.read_file(shp_f)
path_data = "../../../data"
data = xr.load_dataset(op.join(path_data, 'sst_daily_1981_2024_palau.nc'))
dataset_id = 'sst'
ax = plot_base_map(shp_eez = shp_eez, figsize = [10, 6])
im = ax.pcolor(data.lon, data.lat, data.mean(dim='time')[dataset_id], transform=ccrs.PlateCarree(), 
                cmap = 'hot_r', vmin = np.percentile(data.mean(dim = 'time')[dataset_id], 1), 
                vmax = np.percentile(data.mean(dim = 'time')[dataset_id], 99))
ax.set_extent([lon_range[0], lon_range[1], lat_range[0], lat_range[1]], crs=ccrs.PlateCarree())
plt.colorbar(im, ax=ax, label='SST (ºC)')
<matplotlib.colorbar.Colorbar at 0x17beccb60>
../../../_images/d95e742a5b8f88801980dd56a34332d9d393d48849501b886af9cb161f9e089e.png

Mean Area#

dict_plot = [{'data' : data.mean(dim = ['lon', 'lat']).to_dataframe(), 
              'var' : dataset_id, 'ax' : 1, 'label' : 'SST - MEAN AREA'},]
fig = plot_timeseries_interactive(dict_plot, trendline=True, scatter_dict = None, figsize = (25, 12));

Mean Area#

data_mean = data.mean(dim = ['lon', 'lat']).to_dataframe()
datag = data_mean.groupby(data_mean.index.year).max()
datag.index = pd.to_datetime(datag.index, format = '%Y')
dict_plot = [{'data' : datag, 'var' : 'sst', 'ax' : 1, 'label':f'Annual Maxima'},]
ax = plot_bar_probs(x = datag.index.year, y = datag.sst.values, trendline=True, figsize = (15, 6),
                y_label = 'Maximum SST [ºC]')
ax.set_ylim([29, None])
(29.0, 32.35311899185181)
../../../_images/9c3883179d5e8856871a7d60cc4d2b20c7497cb0cccf3b0bfe4725cad8c0f38e.png
datam = data_mean.groupby(data_mean.index.year).mean()
datam.index = pd.to_datetime(datag.index, format = '%Y')
dict_plot = [{'data' : datam, 'var' : 'sst', 'ax' : 1, 'label':f'Annual Mean'},]
ax = plot_bar_probs(x = datam.index.year, y = datam.sst.values, trendline=True, figsize = (15, 6),
                y_label = 'Mean SST [ºC]')
ax.set_ylim([27, None])
(27.0, 31.222521686553954)
../../../_images/7c88a06994c5ac4e60748fdf506c357f99d0d8c98d5dbd91edc0ef415258b7a3.png
datam = data_mean.groupby(data_mean.index.year).min()
datam.index = pd.to_datetime(datag.index, format = '%Y')
dict_plot = [{'data' : datam, 'var' : 'sst', 'ax' : 1, 'label':f'Annual Minimum'},]
ax = plot_bar_probs(x = datam.index.year, y = datam.sst.values, trendline=True, figsize = (15, 6),
                y_label = 'Minimum SST [ºC]')
ax.set_ylim([25, None])
(25.0, 30.36408748626709)
../../../_images/1ab6193f9de31fc43b5e5f45bba0d14f7a3128da64700e1acd672c7b46954e84.png